package tests.informe;

import org.junit.Test;

import utils.CustomRandom;
import utils.UI.JFreeChart.Tp4Header;
import AlgoritmosGeneticos.model.AlgoritmoGenetico;
import AlgoritmosGeneticos.model.impl.AlgoritmoGeneticoImpl;
import AlgoritmosGeneticos.model.impl.corte.CorteContenido;
import AlgoritmosGeneticos.model.impl.corte.CorteIteraciones;
import AlgoritmosGeneticos.model.impl.cruces.CruceAnular;
import AlgoritmosGeneticos.model.impl.cruces.CruceSimple;
import AlgoritmosGeneticos.model.impl.mutuaciones.MutacionBasica;
import AlgoritmosGeneticos.model.impl.selecciones.Elite;
import AlgoritmosGeneticos.model.impl.selecciones.MixtoEliteRuleta;
import AlgoritmosGeneticos.model.impl.selecciones.MixtoEliteUniversal;
import AlgoritmosGeneticos.model.impl.selecciones.Ruleta;
import AlgoritmosGeneticos.model.impl.selecciones.Torneos;
import AlgoritmosGeneticos.model.impl.selecciones.Universal;

public class Punto1 {
	
	CustomRandom cr=new CustomRandom(1);
	private final int POP_SIZE= 200;
	private final int K= 20;
	private final double P_MUT= 0.01f;
	private final int COTA_CORTE=	1000;
	
	@Test
	public void t1() throws InterruptedException{
		
		System.out.println("Test 1 >> ");
		
		AlgoritmoGeneticoImpl ag= new AlgoritmoGeneticoImpl(POP_SIZE,K,P_MUT);
		System.out.print("Estrategia de cruce: ");
		ag.setOpCru			(new CruceSimple());
		System.out.print("Estrategia de mutacion: ");
		ag.setOpMut			(new MutacionBasica());
		System.out.print("Estrategia de seleccion: ");
		ag.seteSeleccion	(new Elite());
		System.out.print("Estrategia de reemplazo: ");
		ag.seteReemplazo	(new Ruleta());
		System.out.print("Estrategia de corte: ");
		ag.setCondicion		(new CorteIteraciones(COTA_CORTE));
		ag.setHeaders		(new Tp4Header());
		ag.setSeePlot		(false);
		
		ag.setFitness			(AlgoritmoGenetico.fitness.MAXIMO);
		ag.setMaxIterations		(200);	
		System.out.println("------EVOLUCIONANDO POBLACION----------");
		ag.evolucionaPoblacion	();	
		System.out.println();
	}
	
	@Test
	public void t2() throws InterruptedException{
		
		System.out.println("Test 2 >> ");
		
		AlgoritmoGeneticoImpl ag= new AlgoritmoGeneticoImpl(POP_SIZE,K,P_MUT);
		System.out.print("Estrategia de cruce: ");
		ag.setOpCru			(new CruceSimple());
		System.out.print("Estrategia de mutacion: ");
		ag.setOpMut			(new MutacionBasica());
		System.out.print("Estrategia de seleccion: ");
		ag.seteSeleccion	(new Elite());
		System.out.print("Estrategia de reemplazo: ");
		ag.seteReemplazo	(new Universal());
		System.out.print("Estrategia de corte: ");
		ag.setCondicion		(new CorteIteraciones(COTA_CORTE));
		ag.setHeaders		(new Tp4Header());
		ag.setSeePlot		(false);
		
		ag.setFitness			(AlgoritmoGenetico.fitness.MAXIMO);
		ag.setMaxIterations		(200);	
		System.out.println("------EVOLUCIONANDO POBLACION----------");
		ag.evolucionaPoblacion	();	
		System.out.println();

	}
	@Test
	public void t3() throws InterruptedException{
		
		System.out.println("Test 3 >> ");
		
		AlgoritmoGeneticoImpl ag= new AlgoritmoGeneticoImpl(POP_SIZE,K,P_MUT);
		System.out.print("Estrategia de cruce: ");
		ag.setOpCru			(new CruceSimple());
		System.out.print("Estrategia de mutacion: ");
		ag.setOpMut			(new MutacionBasica());
		System.out.print("Estrategia de seleccion: ");
		ag.seteSeleccion	(new Elite());
		System.out.print("Estrategia de reemplazo: ");
		ag.seteReemplazo	(new Torneos());
		System.out.print("Estrategia de corte: ");
		ag.setCondicion		(new CorteIteraciones(COTA_CORTE));
		ag.setHeaders		(new Tp4Header());
		ag.setSeePlot		(false);
		
		ag.setFitness			(AlgoritmoGenetico.fitness.MAXIMO);
		ag.setMaxIterations		(200);	
		System.out.println("------EVOLUCIONANDO POBLACION----------");
		ag.evolucionaPoblacion	();	
		System.out.println();
	}
	
	@Test
	public void t4() throws InterruptedException{
		
		System.out.println("Test 4 >> ");
		
		AlgoritmoGeneticoImpl ag= new AlgoritmoGeneticoImpl(POP_SIZE,K,P_MUT);
		System.out.print("Estrategia de cruce: ");
		ag.setOpCru			(new CruceSimple());
		System.out.print("Estrategia de mutacion: ");
		ag.setOpMut			(new MutacionBasica());
		System.out.print("Estrategia de seleccion: ");
		ag.seteSeleccion	(new Elite());
		System.out.print("Estrategia de reemplazo: ");
		ag.seteReemplazo	(new MixtoEliteRuleta());
		System.out.print("Estrategia de corte: ");
		ag.setCondicion		(new CorteIteraciones(COTA_CORTE));
		ag.setHeaders		(new Tp4Header());
		ag.setSeePlot		(false);
		
		ag.setFitness			(AlgoritmoGenetico.fitness.MAXIMO);
		ag.setMaxIterations		(200);	
		System.out.println("------EVOLUCIONANDO POBLACION----------");
		ag.evolucionaPoblacion	();	
		System.out.println();
	}
	
	@Test
	public void t5() throws InterruptedException{
		
		System.out.println("Test 5 >> ");
		
		AlgoritmoGeneticoImpl ag= new AlgoritmoGeneticoImpl(POP_SIZE,K,P_MUT);
		System.out.print("Estrategia de cruce: ");
		ag.setOpCru			(new CruceSimple());
		System.out.print("Estrategia de mutacion: ");
		ag.setOpMut			(new MutacionBasica());
		System.out.print("Estrategia de seleccion: ");
		ag.seteSeleccion	(new Elite());
		System.out.print("Estrategia de reemplazo: ");
		ag.seteReemplazo	(new MixtoEliteUniversal());
		System.out.print("Estrategia de corte: ");
		ag.setCondicion		(new CorteIteraciones(COTA_CORTE));
		ag.setHeaders		(new Tp4Header());
		ag.setSeePlot		(false);
		
		ag.setFitness			(AlgoritmoGenetico.fitness.MAXIMO);
		ag.setMaxIterations		(200);	
		System.out.println("------EVOLUCIONANDO POBLACION----------");
		ag.evolucionaPoblacion	();	
		System.out.println();
	}
	
	@Test
	public void t6() throws InterruptedException{
		
		System.out.println("Test 6 >> ");
		
		AlgoritmoGeneticoImpl ag= new AlgoritmoGeneticoImpl(POP_SIZE,K,P_MUT);
		System.out.print("Estrategia de cruce: ");
		ag.setOpCru			(new CruceSimple());
		System.out.print("Estrategia de mutacion: ");
		ag.setOpMut			(new MutacionBasica());
		System.out.print("Estrategia de seleccion: ");
		ag.seteSeleccion	(new Elite());
		System.out.print("Estrategia de reemplazo: ");
		ag.seteReemplazo	(new Elite());
		System.out.print("Estrategia de corte: ");
		ag.setCondicion		(new CorteIteraciones(COTA_CORTE));
		ag.setHeaders		(new Tp4Header());
		ag.setSeePlot		(false);
		
		ag.setFitness			(AlgoritmoGenetico.fitness.MAXIMO);
		ag.setMaxIterations		(200);	
		System.out.println("------EVOLUCIONANDO POBLACION----------");
		ag.evolucionaPoblacion	();	
		System.out.println();
	}

	@Test
	public void t7() throws InterruptedException{
		
		System.out.println("Test 7 >> ");
		
		AlgoritmoGeneticoImpl ag= new AlgoritmoGeneticoImpl(POP_SIZE,K,P_MUT);
		System.out.print("Estrategia de cruce: ");
		ag.setOpCru			(new CruceAnular());
		System.out.print("Estrategia de mutacion: ");
		ag.setOpMut			(new MutacionBasica());
		System.out.print("Estrategia de seleccion: ");
		ag.seteSeleccion	(new Elite());
		System.out.print("Estrategia de reemplazo: ");
		ag.seteReemplazo	(new MixtoEliteUniversal());
		System.out.print("Estrategia de corte: ");
		ag.setCondicion		(new CorteContenido(COTA_CORTE, 0.1) );
		ag.setHeaders		(new Tp4Header());
		ag.setSeePlot		(false);
		
		ag.setFitness			(AlgoritmoGenetico.fitness.MAXIMO);
		ag.setMaxIterations		(200);	
		System.out.println("------EVOLUCIONANDO POBLACION----------");
		ag.evolucionaPoblacion	();	
		System.out.println();
	}

}
